package pkg

import (
	"crypto/md5"
	"encoding/hex"
	"encoding/json"
	"errors"
	"io/ioutil"
	"myapp/config"
	"net/http"
	"net/url"
	"strings"
)

// 配置常量
const (
	APIURL   = "https://fanyi-api.baidu.com/api/trans/vip/translate"
	FromLang = "zh" // 自动检测源语言
	ToLang   = "en" // 目标语言，示例为中文
)

type TransResult struct {
	Src string `json:"src"`
	Dst string `json:"dst"`
}

type FanyiResult struct {
	From        string        `json:"from"`
	To          string        `json:"to"`
	TransResult []TransResult `json:"trans_result"`
}

// type TransError struct {
// 	ErrorCode string `json:"error_code"`
// 	ErrorMsg  string `json:"error_msg"`
// }

func generateSign(appid, query, salt, apiKey string) string {
	// 拼接字符串 appid + q + salt + 密钥
	signStr := appid + query + salt + apiKey
	// 生成 MD5 签名
	hash := md5.New()
	hash.Write([]byte(signStr))
	return strings.ToLower(hex.EncodeToString(hash.Sum(nil)))
}

func Translate(query string) (*FanyiResult, error) {
	// 获取随机数 salt
	salt := "123456" // 这里的salt可以是任意的字母或数字字符串

	// 生成签名
	sign := generateSign(config.Conf.BaiduFanyiAppId, query, salt, config.Conf.BaiduFanyiApikey)

	// 构建请求参数
	data := url.Values{}
	data.Set("q", query)
	data.Set("from", FromLang)
	data.Set("to", ToLang)
	data.Set("appid", config.Conf.BaiduFanyiAppId)
	data.Set("salt", salt)
	data.Set("sign", sign)

	// 发送 POST 请求
	resp, err := http.Post(APIURL, "application/x-www-form-urlencoded", strings.NewReader(data.Encode()))
	if err != nil {
		return nil, err
	}
	defer resp.Body.Close()

	// 读取返回的 JSON 数据
	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		return nil, err
	}

	var result *FanyiResult
	err = json.Unmarshal(body, &result)
	if err != nil {
		return nil, errors.New("数据解析失败")
	}

	return result, nil
}
